package com.loy;

import com.loy.entity.HelloProto;
import com.loy.entity.HelloServiceGrpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;

import java.util.Iterator;
import java.util.concurrent.TimeUnit;

/**
 * 4. 客户端异步处理服务器端流式响应的数据
 */
public class GrpcClient4 {

    public static void main(String[] args) {
        // 1. 创建和服务器端进行通信的管道
        ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 9000).usePlaintext().build();

        try{

            HelloServiceGrpc.HelloServiceStub helloServiceStub = HelloServiceGrpc.newStub(managedChannel);

            HelloProto.HelloRequest.Builder builder = HelloProto.HelloRequest.newBuilder();
            builder.setName("sunshuai");
            HelloProto.HelloRequest request = builder.build();


            helloServiceStub.c2ss(request, new StreamObserver<HelloProto.HelloResponse>() {
                @Override
                public void onNext(HelloProto.HelloResponse helloResponse) {
                    // 服务端响应了一个消息之后，我们可以在这里进行立即处理
                    System.out.println("服务端每一次响应的信息：" +helloResponse.getResult() );
                }

                @Override
                public void onError(Throwable throwable) {
                    // 出现异常的时候的处理
                }

                @Override
                public void onCompleted() {
                    // 如果需要把服务端响应的所有数据拿到之后，再处理的话，那么就可以在这里进行操作
                    System.out.println("服务端所有响应完成了...........");
                }
            });

            managedChannel.awaitTermination(12, TimeUnit.SECONDS);

        }catch (Exception e){

        }finally {
            managedChannel.shutdown();
        }



    }
}
